package com.example.controller;

import com.example.service.UserService;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Random;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 表单 <input> 的 name 值	    控制器参数名
     * name="userName"	            String userName
     * name="userPassword"	        String userPassword
     * Spring MVC 的表单参数绑定机制会自动将前端 form 表单中提交的数据（由 name 指定）注入到同名的 controller 方法参数中。
     * 如果名称不一致，会出现 null 值、登录失败或校验异常等问题。
     */
    @RequestMapping("/login")
    public String login(String userName, String userPassword, boolean rememberMe, String loginType) {
        try {
            /**
             * 调用认证逻辑
             */
            userService.checkLogin(userName, userPassword, rememberMe, loginType);
            System.out.println("登陆成功");
            return "index";
        } catch (Exception e) {
            System.out.println("登陆失败");
            return "login";
        }
    }

    @RequestMapping("/register")
    public String register(String userName, String userPassword) {
        System.out.println("用户注册");
        /**
         * 注册的时候要对密码进行加密存储
         */
        Md5Hash md5Hash = new Md5Hash(userPassword);
        System.out.println("md5Hash：" + md5Hash);
        /**
         * 加盐加密
         */
        int salt = new Random().nextInt(90000) + 10000;
        Md5Hash md5HashSalt = new Md5Hash(userPassword, salt + "");
        System.out.println("salt：" + salt);
        System.out.println("md5HashSalt：" + md5HashSalt);
        /**
         * 加盐加密+多次hash
         */
        Md5Hash hash = new Md5Hash(userPassword, salt + "", 3);
        System.out.println("hash：" + hash);
        /**
         * SimpleHash
         */
        SimpleHash simpleHash = new SimpleHash("MD5", userPassword, salt + "", 3);
        System.out.println("simpleHash：" + simpleHash);
        return "login";
    }

}
